import React from 'react'
import { attach } from '@formily/core/src/__tests__/shared'
import { createForm } from '@formily/core'

// ------- Object field

// path -> address
// form.indexes = {
//   'object': "object",
//   'object.void': 'object.void'
//   'object.aaa': "object.void.aaa",
//   'object.bbb': 'object.bbb',
// }

// address -> field
// form.fields = {
//   'object': ObjectField,
//   'object.void': VoidField,
//   'object.void.aaa': Field
//   'object.bbb': Field,
// }

const form = attach(createForm())
const object_ = attach(
  form.createObjectField({
    name: 'object',
  })
)
const void_ = attach(
  form.createVoidField({
    name: 'void',
    basePath: 'object',
  })
)
const aaa = attach(
  form.createField({
    name: 'aaa',
    basePath: 'object.void',
  })
)
const bbb = attach(
  form.createField({
    name: 'bbb',
    basePath: 'object',
  })
)

// debugger
// object_.query('object.void')
// console.log('======')
void_.query('.') // object
// void_.query('.bbb') // object.bbb
// aaa.query('.ccc') // object.void.ccc
// aaa.query('..').take() // object
// aaa.query('..bbb').take() // object.bbb
// bbb.query('.void').take() // object.void
// bbb.query('.void.aaa').take() // object.void.aaa
// bbb.query('.void.ccc').take() // object.void.ccc

// expect(object_.query('object.void').take()).not.toBeUndefined()
// expect(object_.query('object.void.aaa').take()).not.toBeUndefined()
// expect(void_.query('.')).not.toBeUndefined()
// expect(void_.query('.bbb').take()).not.toBeUndefined()
// expect(aaa.query('.ccc').take()).toBeUndefined()
// expect(aaa.query('..').take()).not.toBeUndefined()
// expect(aaa.query('..bbb').take()).not.toBeUndefined()
// expect(bbb.query('.void').take()).not.toBeUndefined()
// expect(bbb.query('.void.aaa').take()).not.toBeUndefined()
// expect(bbb.query('.void.ccc').take()).toBeUndefined()

// debugger
// pattern 是 path 的情况，在 takeMatchPattern 中，通过 indexes 映射出的才是 address
// void_.query('.aaa')

// ----- Array field

// const form = attach(createForm())
// const array = attach(
//   form.createArrayField({
//     name: 'array',
//   })
// )
// const other = attach(
//   form.createField({
//     name: 'other',
//     basePath: 'array',
//   })
// )
// attach(
//   form.createVoidField({
//     name: 0,
//     basePath: 'array',
//   })
// )
// const aaa = attach(
//   form.createField({
//     name: 'aaa',
//     basePath: 'array.0',
//     value: 123,
//   })
// )
//
// const object = attach(
//   form.createField({
//     name: 'object',
//     basePath: 'array.0.aaa',
//   })
// )

// debugger
//
// other.query('.other') // array.other

export default () => <div>query-test</div>
